package atpa.partial;

public class CoadaT {

    int tab[];
    int cap; // se adauga
    int coada; // se extrage
    boolean start;

    public CoadaT(int dim) {
        tab = new int[dim];
        cap = 0;
        coada = 0;
        start = true;
    }

    public void put(int ch) {
        if (cap + 1 == coada) {
            System.out.println("\n!!!ch=" + ch + " plina situatia 1");
        } else if (cap + 1 == tab.length && coada == 0) {
            System.out.println("\n!!!ch=" + ch + " plina situatia 2");
        } else {
            if (start) {
                tab[cap] = ch;
                start = false;
            } else {
                if (cap + 1 == tab.length) {
                    cap = -1;
                }
                tab[cap + 1] = ch;
                cap++;
            }
        }
    }

    public int get() {
        int xx = -1;
        if (!start) {
            xx = tab[coada];
            if (coada != cap) {
                coada++;
            } else {
                start = true;
            }
            if (coada == tab.length) {
                coada = 0;
            }
        }
        if (xx == -1) {
            System.out.println("ERROR: stack empty");
        }
        return xx;
    }

    public boolean isFull() {
        if (cap + 1 == coada) {
            System.out.println("ERROR: stack full 1");
            return true;
        } else if (cap + 1 == tab.length && coada == 0) {
            System.out.println("ERROR: stack full 2");
            return true;
        } else {
            return false;
        }
    }

    public boolean isEmpty() {
        return start;
    }

    public int peek() {
        int xx = -1;
        if (!start) {
            xx = tab[coada];
        }
        if (xx == -1) {
            System.out.println("ERROR: stack empty");
        }
        return xx;

    }

    public void show() {
        String str = "";
        if (cap == tab.length) {
            cap = 0;
        }
        if (coada == tab.length) {
            coada = 0;
        }

        str = str + "coada=" + coada + "," + tab[coada]
                + " | cap=" + cap + "," + tab[cap]
                + " | tab=";

        for (int i = 0; i < tab.length; i++) {
            str = str + " " + tab[i];
        }

        str = str + "\n     | cdT=";
        if (!start) {
            if (cap < coada) {
                for (int i = 0; i <= cap; i++) {
                    str = str + tab[i] + " ";
                }
                str = str + "-> [";
                for (int i = coada; i < tab.length; i++) {
                    str = str + tab[i] + " ";
                }
            } else {
                str = str + "[";
                for (int i = coada; i <= cap; i++) {
                    str = str + tab[i] + " ";
                }
                str = str + "->";
            }
        }

        System.out.println(str);
    }
}
